eigen Interface

public interface eigen

An interface to the eigenvalue and eigenvector routines.


Module Procedures

private pure subroutine eigen_symm(a, vals, vecs)

Computes the eigenvalues, and optionally the eigenvectors, of a matrix by solving the eigenvalue problem when is a symmetric matrix.

Arguments

Type IntentOptional Attributes Name
real(kind=real64), intent(in), dimension(:,:) :: a

The N-by-N symmetric matrix on which to operate.

real(kind=real64), intent(out), dimension(:) :: vals

An N-element array that will contain the eigenvalues sorted into ascending order.

real(kind=real64), intent(out), optional, dimension(:,:) :: vecs

If present, the eigenvectors will be computed and this matrix will contain the eigenvectors (one per column) corresponding to each eigenvalue in vals.

private pure subroutine eigen_asymm(a, vals, rvecs, lvecs)

Computes the eigenvalues, and optionally the eigenvectors, of a matrix by solving the eigenvalue problem when is square, but not necessarily symmetric.

Arguments

Type IntentOptional Attributes Name
real(kind=real64), intent(in), dimension(:,:) :: a

On input, the N-by-N matrix on which to operate. On output, the contents of this matrix are overwritten.

complex(kind=real64), intent(out), dimension(:) :: vals

An N-element array containing the eigenvalues of the matrix. The eigenvalues are not sorted.

complex(kind=real64), intent(out), optional, dimension(:,:) :: rvecs

An optional N-by-N matrix, that if supplied, signals to compute the right eigenvectors (one per column).

complex(kind=real64), intent(out), optional, dimension(:,:) :: lvecs

An optional N-by-N matrix, that if supplied, signals to compute the left eigenvectors (one per column).

private pure subroutine eigen_gen(a, b, alpha, beta, rvecs, lvecs)

Computes the eigenvalues, and optionally the eigenvectors, by solving the eigenvalue problem: .

Arguments

Type IntentOptional Attributes Name
real(kind=real64), intent(in), dimension(:,:) :: a

The N-by-N matrix .

real(kind=real64), intent(in), dimension(:,:) :: b

The N-by-N matrix .

complex(kind=real64), intent(out), dimension(:) :: alpha

An N-element array that, if beta is not supplied, contains the eigenvalues. If beta is supplied however, the eigenvalues must be computed as . This however, is not as trivial as it seems as it is entirely possible, and likely, that can overflow or underflow. With that said, the values in will always be less than and usually comparable with the NORM().

real(kind=real64), intent(out), optional, dimension(:) :: beta

An optional N-element array that if provided forces alpha to return the numerator, and this array contains the denominator used to determine the eigenvalues as . If used, the values in this array will always be less than and usually comparable with the NORM().

complex(kind=real64), intent(out), optional, dimension(:,:) :: rvecs

An optional N-by-N matrix, that if supplied, signals to compute the right eigenvectors (one per column).

complex(kind=real64), intent(out), optional, dimension(:,:) :: lvecs

An optional N-by-N matrix, that if supplied, signals to compute the left eigenvectors (one per column).

private pure subroutine eigen_cmplx(a, vals, rvecs, lvecs)

Computes the eigenvalues, and optionally the eigenvectors, of a matrix by solving the eigenvalue problem when is square, but not necessarily symmetric.

Arguments

Type IntentOptional Attributes Name
complex(kind=real64), intent(in), dimension(:,:) :: a

The N-by-N matrix on which to operate.

complex(kind=real64), intent(out), dimension(:) :: vals

An N-element array containing the eigenvalues of the matrix. The eigenvalues are not sorted.

complex(kind=real64), intent(out), optional, dimension(:,:) :: rvecs

An optional N-by-N matrix, that if supplied, signals to compute the right eigenvectors (one per column).

complex(kind=real64), intent(out), optional, dimension(:,:) :: lvecs

An optional N-by-N matrix, that if supplied, signals to compute the left eigenvectors (one per column).